﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataAccessLayer;
using MyCommon;

namespace BussinessLayer
{
    public class PhienBO : BaseBO
    {
        public IEnumerable<Phien> GetAllPhien()
        {
            return _dao.Phien.GetAllPhien();
        }
        public Phien GetPhienById(int id)
        {
            return _dao.Phien.GetPhienById(id);
        }
        public bool UpdatePhien(Phien inPhien)
        {
            return _dao.Phien.UpdatePhien(inPhien);
        }
        public bool InsertPhien(Phien inPhien)
        {
            return _dao.Phien.InsertPhien(inPhien);
        }
        
        public bool DelPhien(int id)
        {
            Phien objPhien = GetPhienById(id);
            objPhien.isDelete = true;
            return UpdatePhien(objPhien);
        }
        public string GenerateMaPhien()
        {
            Phien aObj = _dao.Phien.GetLastRecord();
            if (aObj != null)
            {
                return Utils.GenerateCode(CodeType.Phien, aObj.Id + 1);
            }
            else
            {
                return Utils.GenerateCode(CodeType.Phien, 1);
            }

        }
        public Phien GetLastRecord()
        {
            return _dao.Phien.GetLastRecord();
        }
        public IEnumerable<View_Phien_ThietBiBH> GetThongTinThietBiByPhienId(int inPhienId)
        {
            return _dao.Phien.GetThongTinThietBiByPhienId(inPhienId);
        }

        public IEnumerable<View_Phien_NhanVienThucHien> GetNhanVienThucHienByPhienId(int inPhienId)
        {
            return _dao.Phien.GetNhanVienThucHienByPhienId(inPhienId);
        }

        public IEnumerable<Phien> GetPhienInDay(DateTime inDay)
        {
            return _dao.Phien.GetPhienBetween(inDay, inDay);
        }

        public IEnumerable<Phien> GetPhienInDay(DateTime inDay, bool inOnlyChuaHoanThanh)
        {
            return _dao.Phien.GetPhienBetween(inDay, inDay, inOnlyChuaHoanThanh);
        }

        public IEnumerable<Phien> GetPhienInMonth(DateTime inMonth)
        {
            DateTime FristDate = new DateTime(inMonth.Year, inMonth.Month, 1);
            DateTime LastDate = FristDate.AddMonths(1).AddDays(-1);
            return _dao.Phien.GetPhienBetween(FristDate, LastDate);
        }

        public IEnumerable<Phien> GetPhienInMonth(DateTime inMonth, bool inOnlyChuaHoanThanh)
        {
            DateTime FristDate = new DateTime(inMonth.Year, inMonth.Month, 1);
            DateTime LastDate = FristDate.AddMonths(1).AddDays(-1);
            return _dao.Phien.GetPhienBetween(FristDate, LastDate, inOnlyChuaHoanThanh);
        }

        public IEnumerable<Phien> GetPhienBetween(DateTime inFromDate, DateTime inToDate)
        {
            return _dao.Phien.GetPhienBetween(inFromDate, inToDate);
        }

        public IEnumerable<Phien> GetPhienBetween(DateTime inFromDate, DateTime inToDate, bool inOnlyChuaHoanThanh = false)
        {
            return _dao.Phien.GetPhienBetween(inFromDate, inToDate, inOnlyChuaHoanThanh);
        }
        
        
        ///////////////////////////////////////////////////////////////////////////////////////////
        // Method cho phien tiep nhan

        public IEnumerable<Phien> GetPhienTiepNhanInDay(DateTime inDay)
        {
            return _dao.Phien.GetPhienTiepNhanBetween(inDay, inDay);
        }

        public IEnumerable<Phien> GetPhienTiepNhanInDay(DateTime inDay, bool inOnlyChuaHoanThanh)
        {
            return _dao.Phien.GetPhienTiepNhanBetween(inDay, inDay, inOnlyChuaHoanThanh);
        }

        public IEnumerable<Phien> GetPhienTiepNhanInMonth(DateTime inMonth)
        {
            DateTime FristDate = new DateTime(inMonth.Year, inMonth.Month, 1);
            DateTime LastDate = FristDate.AddMonths(1).AddDays(-1);
            return _dao.Phien.GetPhienTiepNhanBetween(FristDate, LastDate);
        }

        public IEnumerable<Phien> GetPhienTiepNhanInMonth(DateTime inMonth, bool inOnlyChuaHoanThanh)
        {
            DateTime FristDate = new DateTime(inMonth.Year, inMonth.Month, 1);
            DateTime LastDate = FristDate.AddMonths(1).AddDays(-1);
            return _dao.Phien.GetPhienTiepNhanBetween(FristDate, LastDate, inOnlyChuaHoanThanh);
        }

        public IEnumerable<Phien> GetPhienTiepNhanBetween(DateTime inFromDate, DateTime inToDate)
        {
            return _dao.Phien.GetPhienTiepNhanBetween(inFromDate, inToDate);
        }

        public IEnumerable<Phien> GetPhienTiepNhanBetween(DateTime inFromDate, DateTime inToDate, bool inOnlyChuaHoanThanh = false)
        {
            return _dao.Phien.GetPhienTiepNhanBetween(inFromDate, inToDate, inOnlyChuaHoanThanh);
        }
        
        public bool IsPhienComplete(int inPhienId)
        {
            return _dao.Phien.IsPhienComplete(inPhienId);
        }

    }
}
